package com.zzq.my.jetpacks.jectpackapp.net

import com.zzq.my.jetpacks.jectpackapp.bean.BannerInfokt
import com.zzq.my.jetpacks.jectpackapp.bean.LoadIndexInfo
import com.zzq.my.jetpacks.jectpackapp.bean.LoginInfokt
import com.zzq.my.jetpacks.net.entity.ApiResponse
import okhttp3.MultipartBody
import okhttp3.RequestBody
import okhttp3.ResponseBody
import retrofit2.http.*
/**
 * 描述：Api接口
 * 作者：zhuangzeqin
 * 时间: 2018/8/15-17:38
 * 邮箱：zzq@eeepay.cn
 * 备注:retrofit2.0后：BaseUrl要以/结尾；@GET 等请求不要以/开头；@Url: 可以定义完整url，不要以 / 开头。
 * // @DELETE
 * //    @PUT
 * //    @POST
 * //    @GET
 * //常用的注解的使用
 * //使用@Url注解，传入该Url地址就OK啦，跨过BaseUrl，直接访问该Url地址
 * //如果直接用对象 @Body
 * //    @Query、@QueryMap：用于Http Get请求传递参数
 * //    @Field：用于Post方式传递参数,需要在请求接口方法上添加@FormUrlEncoded,即以表单的方式传递参数
 * //    @Body：用于Post,根据转换方式将实例对象转化为对应字符串传递参数.比如Retrofit添加GsonConverterFactory则是将body转化为gson字符串进行传递
 * //    @Path：用于URL上占位符
 * //    @Part：配合@Multipart使用,一般用于文件上传
 * //    @Header：添加http header
 * //    @Headers：跟@Header作用一样,只是使用方式不一样,@Header是作为请求方法的参数传入,@Headers是以固定方式直接添加到请求方法上
 * //    @Headers("Content-Type: application/javascript")  1. 添加单个header
 * //    @Headers({  2. 添加多个header
 * //            "Content-Type: application/javascript",
 * //            "User-Agent: YourAgent"
 * //    })
 * //    @GET("/data/{user_id}")
 * //    Call<List<Data>> getData();
 * <p>
 * //常用的注解的使用
 * //形如“?a=xxxx&b=xxxx&c=xxxx”的url是不能用@PATH注解来拼接的，应该使用@Query或者@QueryMap注解
 * //总结：@Query和@QueryMap注解会把参数拼接到url后面，适用于GET请求
 * // 对应POST请求，不过需要结合@FormUrlEncoded来使用，
 * //可以使用post访问，结合@Field或@FieldMap做表单提交
 * <p>
 * //@Query、@QueryMap 一般是 @Get标记的，URL后面跟的参数请求 ？key=value&key1=value1
 * <p>
 * //@Field、@FieldMap 一般是@Post 、@FormUrlEncoded标记的，表单请求
 * <p>
 * //@Part、@PartMap 一般是@Post、 @Multipart标记的，带文件的表单请求
 * <p>
 * //@Body标记的请求体，支持自定义Bean类，但不能标记为 @FormUrlEncoded / @Multipart
 */
interface ApiService {
    @POST("agentApi2/login/")
    suspend fun login(@Body request: Map<String, String>): ApiResponse<LoginInfokt.Data>

    //首页->数据下发（今日交易量、全部商户、今日新增商户) add by zhuagnzeqin 2019年5月29日 17:55:44
    @GET("agentApi2/order/loadIndexData")
    suspend fun reqLoadIndexData(): ApiResponse<LoadIndexInfo?>

    //首页banner 广告图片 add by zhuagnzeqin 2019年5月29日 17:55:47
    @POST("agentApi2/banner/findBanner")
    suspend fun reqFindBannerList(): ApiResponse<List<BannerInfokt.Data>>

    //这种直接返回一个实体
    @POST("agentApi2/banner/findBanner")
    suspend fun reqFindBannerList2(): BannerInfokt?

    //获取图形验证码  这种直接返回一个ResponseBody
    @GET("agentApi2/setting/loadCaptcha")
    suspend fun loadCaptcha(): ResponseBody

    //提交意见反馈+参数+图片上传
    @Multipart
    @POST("agentApi2/problem/submitFeedback")
    @Headers("isSkip: 10086")
    suspend fun submitFeedback(@PartMap request: Map<String, String>, @Part() parts: List<MultipartBody.Part>):ApiResponse<String>

    //参数放到body中 以json方式传输
    @POST("/npwx/wx/xxx/xxxx")
    @Headers("Content-Type: application/json","Accept: application/json")
    suspend fun getPhoneVerify(@Body request: RequestBody)

    //通用下载
    @Streaming
    @GET
    suspend fun downloadFile(@Url url:String): ResponseBody


}